package com.hzw.saas.api.user;

import java.util.List;

import com.hzw.saas.api.user.bo.UserRightsBO;
import com.hzw.saas.api.user.bo.UserStorageRightsBO;
import com.hzw.saas.api.user.bo.ValueCompareBO;
import com.hzw.saas.api.user.query.UserRightsUpdateQuery;

/**
 * @author zzl
 * @since 05/07/2021
 */
public interface IUserRightsService {

    UserRightsBO getUserRightsById(String pid);

    /**
     * 获取用户权益信息
     *
     * @param userId 用户ID
     * @return
     */
    UserRightsBO getUserRightsByUser(String userId);

    /**
     * 获取用户存储权益信息
     *
     * @param userId 用户ID
     * @return 用户存储权益信息
     */
    UserStorageRightsBO getStorageRights(String userId);

    /**
     * 根据会员级别增加用户权益
     *
     * @param userId
     * @param levelId
     * @return
     */
    UserRightsBO addUserRights(String userId, String levelId);

    /**
     * 增加用户权益信息
     *
     * @param rights2Add 用户权益信息
     * @return
     */
    UserRightsBO addUserRights(UserRightsBO rights2Add);

    /**
     * 更新用户权益信息
     * 使用相关的level等级权益更新用户权益
     *
     * @param userId
     * @param levelId
     * @param keepHigherRights
     * @return
     */
    boolean updateUserRights(String userId, String levelId, boolean keepHigherRights);

    /**
     * 更新用户权益信息
     * 根据传递的用户权益数据进行更新
     * 即使传递了与原先不同的levelId，也不会使用levelId对应等级的权益进行更新，只会更新levelID字段的值
     *
     * @param rights2Update 更新条件
     * @return
     */
    boolean updateUserRights(UserRightsUpdateQuery rights2Update, boolean keepHigherRights);

    /**
     * 删除用户权益信息
     *
     * @param userId 用户ID
     * @return
     */
    boolean deleteUserRights(String userId);

    /**
     * 比较新旧权益
     *
     * @param userId 用户ID
     * @param newLevelId 新权益级别ID
     * @return
     */
    List<ValueCompareBO<?>> compareUserRights(String userId, String newLevelId);
}
